/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package starfox.personagens;

import java.util.ArrayList;
import java.util.Iterator;
import org.newdawn.slick.Image;
import org.newdawn.slick.SlickException;
import org.newdawn.slick.geom.Vector2f;
import util.CaixaColisao;
import util.StopWatch;

/**
 *
 * @author Lucas
 */
public class AndrossCabeca {
    //Imagens da cabeça
    Image sprite[] = new Image[2];

    //Posição
    Vector2f pos = new Vector2f();

    //Tempo para controlar a frequência dos tiros
    StopWatch controleTiros = null;

    //Caixa de colisão
    CaixaColisao box = null;

    //ArrayList de tiles (os "quadrados" que ela atira)
    ArrayList<Tile> tiles = null;

    //Tile temporário, para ser adicionado à ArrayList
    Tile tile;

    int vidas;

    //Ver qual sprite usar
    int status;

    //Este vetor será usado para pegar a posição da arwing no jogo e atirar em sua direção
    Vector2f arwPos = new Vector2f();

    public AndrossCabeca() throws SlickException{
        //Carregar os 2 sprites
        sprite[0] = new Image("imagens/sprites/Andross.png");
        sprite[1] = new Image("imagens/sprites/Andross robo.png");

        //Colocar o status 0 como padrão
        status = 0;

        //Colocar a cabeça no centro horizontal da tela e em acima da tela, para ir descendo
        pos.x = 400-sprite[0].getWidth()/2;
        pos.y = -20-sprite[0].getHeight();

        vidas = 50;

        //Colocar uma caixa de colisão em torno da cabeça
        box = new CaixaColisao(pos.x+58, pos.y, 84, 136);

        tiles = new ArrayList<Tile>();

        controleTiros = new StopWatch();
    }

    public Vector2f getPos(){
        return pos;
    }

    public int getWidth(){
        return sprite[status].getWidth();
    }

    public int getHeight(){
        return sprite[status].getHeight();
    }

    public CaixaColisao getCaixaColisao(){
        return box;
    }

    public ArrayList<Tile> getTiles(){
        return tiles;
    }

    public void render(){
        //Desenhar a cabeça e os tiles, se houver algum
        sprite[status].draw(pos.x, pos.y);
        for(Tile t : tiles)
            t.render();
    }

    public int getVidas(){
        return vidas;
    }

    public void diminuirVidas(){
        vidas--;
    }

    public void update(int delta, Arwing arw) throws SlickException{
        //Descer a cabeça até certa posição, atualizando a posição da caixa de colisão
        if(pos.y < 50){
            pos.y += 0.1f*delta;
            box.update(pos.x+58, pos.y);
        }

        if(vidas <= 25){
            status = 1;

            //Pegar a posição da Arwing para mirar
            arwPos.x = arw.getPos().x + arw.getWidth()/2;
            arwPos.y = arw.getPos().y + arw.getHeight()/2;

            //Iniciar o controle de tiros
            if(!controleTiros.isRunning()) controleTiros.start();

            //Atirar depois de um tempo
            if(controleTiros.getElapsedTime() >= 800){
                tile = new Tile(pos.x+sprite[status].getWidth()/2, pos.y+sprite[status].getHeight(), arwPos);
                tiles.add(tile);
                controleTiros.reset();
           }
           //Mover os tiros, removendo-os da ArrayList caso saiam da tela
           for(Iterator<Tile> it = tiles.iterator(); it.hasNext();) {
                tile = it.next();
                tile.update(delta);
                if(tile.getPos().y > 600 || tile.getPos().y < 0-tile.getHeight() || tile.getPos().x < 0-tile.getWidth() || tile.getPos().x > 800)
                    it.remove();
            }
        }
    }
}